package com.boot.service;

import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;

@Service
public class IpBlacklistService {

    // 存储被拉黑的 IP 和到期时间戳（毫秒）
    private final Map<String, Long> blacklistedIps = new ConcurrentHashMap<>();

    // 默认封禁时间：15 分钟
    private static final long BLACKLIST_DURATION_MS = TimeUnit.MINUTES.toMillis(15);

    /**
     * 将指定 IP 加入黑名单
     */
    public void blacklistIp(String ip) {
        blacklistedIps.put(ip, System.currentTimeMillis() + BLACKLIST_DURATION_MS);
    }

    /**
     * 判断某 IP 是否在黑名单中
     */
    public boolean isBlacklisted(String ip) {
        Long expireTime = blacklistedIps.get(ip);
        if (expireTime == null) {
            return false;
        }
        if (System.currentTimeMillis() > expireTime) {
            // 自动过期并移除
            blacklistedIps.remove(ip);
            return false;
        }
        return true;
    }

    /**
     * 手动解除黑名单（可选管理员功能）
     */
    public void unblockIp(String ip) {
        blacklistedIps.remove(ip);
    }

    /**
     * 获取剩余封禁时间（秒），用于提示
     */
    public long getRemainingTimeSeconds(String ip) {
        Long expireTime = blacklistedIps.get(ip);
        if (expireTime == null) return 0;
        long remaining = (expireTime - System.currentTimeMillis()) / 1000;
        return Math.max(0, remaining);
    }
}
